package eureka.consumer.redissonlock.interfaces;

import java.util.concurrent.TimeUnit;

/**
 * @Author RenPu
 * @Date 2021/8/26 11:30
 * @Version 1.0
 * @Description: 模板方法
 **/
public interface DistributedLockTemplate {

    /**
     * 使用分布式锁，使用锁默认超时时间。
     *
     * @param callback
     * @param <T>
     * @return
     */
    <T> T lock(DistributedLockCallback<T> callback);

    /**
     * 使用分布式锁。自定义锁的超时时间。
     *
     * @param callback
     * @param leaseTime
     * @param timeUnit
     * @param <T>
     * @return
     */
    <T> T lock(DistributedLockCallback<T> callback, long leaseTime, TimeUnit timeUnit);
}
